<?php

namespace Controller;

class PostListController
{
	//Parametrar: Instanser av klasserna Database, Loginhandler & Topic
	//Returnerar: HTML sträng; lista med Post objekt tillhörande ett specifikt Topic
	//samt Formulär för skapande av ny post						
	public function DoControll(\Model\Database $db, \Model\LoginHandler $lh, \Model\Topic $topic)
	{
		//Instanser
		$pl = new \Model\PostList($db);
		$pv = new \View\PostView();
		
		//Returvariablar	
		$postListHTML = NULL;
		$addPostHTML = NULL;
		
		$postList = $pl->GetPostsByTopicId($topic->getId());
			
		if($postList->Count() != 0)
		{
			$postListHTML = $pv->RenderPostList($postList, $lh->GetUserIdBySession());		
		}	
								
		if($lh->IsLoggedIn() == TRUE)
		{
			$addPostHTML = $pv->RenderNewPostForm();
			
			if($pv->TriedToCreatePost() == TRUE)
			{
				//Försäkrar att användarId via Loginsessionen fortfarande är satt
				if(is_numeric($lh->GetUserIdBySession()) == FALSE)
				{
					return $addPostHTML .= $pv->RenderMessage(\View\PostView::WAS_LOGGED_OUT);
				}
				
				//Validerar input 
				$validationArray = $pl->ValidateNewPostInput($pv->GetContent());		
				
				if(empty($validationArray) == FALSE)
				{
					$addPostHTML .= $pv->RenderErrorArray($validationArray);
					return $postListHTML . $addPostHTML;
				}
				
				$topicId = \View\NavigationView::getTopicIdFromURL();
				
				$pl->AddPost($topicId,
							 $lh->GetUserIdBySession(),
							 $pv->GetContent());	
				
				//Redirectar till samma sida för att den nya posten inte skall skapas igen vid en refresh
				\View\NavigationView::redirectToActiveTopic($topic->getId());			 	 		 		  
			}		
			
			if($pv->TriedToDeletePost() == TRUE)
			{
				$pl->DeletePost($pv->GetPostId());	
				\View\NavigationView::redirectToActiveTopic($topic->getId());					
			}			
			
		}
			
		return $postListHTML . $addPostHTML;						
	}
}

?>